package com.ctshk.rpc.tour.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.tour.dto.*;
import com.ctshk.rpc.tour.dto.cache.*;
import com.ctshk.rpc.tour.dto.schedule.SeriesTripGroupDTO;
import com.ctshk.rpc.tour.req.BranchQueryReq;
import com.ctshk.rpc.tour.req.FavoritesReq;
import com.ctshk.rpc.tour.req.LocalHotSearchReq;
import com.ctshk.rpc.tour.req.es.*;

import java.util.List;

/**
 * <p>
 * 系列团行程 App服务类
 * </p>
 *
 * @author 廖胤松
 * @since 2021-05-17
 */
public interface ISeriesTripAppService {

    /**
     * 旅行团 缓存初始化
     * @return
     */
    Result tripInit();

    /**
     * 旅行团 缓存更新
     * @param req
     * @return
     */
    Result updateTripCache(TripCacheUpdateReq req);

    /**
     * PC 旅行团首页 关联搜索
     * @param key
     * @return
     */
    List<DestinationDTO> associationSearch(String key);

    /**
     * PC 旅行团首页 旅游分组
     *
     * @return
     */
    List<SeriesTripGroupDTO> getHomeGroupInfo(Long channelId);

    /**
     * PC 旅行团首页 目录三级分类
     *
     * @return
     */
    Result<TourPcHomeCatalogAndCmsDTO> getTripHomeCatalogAndBannerAndNotic();

    /**
     * PC 旅行团 详情
     *
     * @param id
     * @return
     */
    Result<TripDetailsResDTO> getPCTripDetails(Long id, Long channelId,Long userId);

    /**
     * PC 旅行团 检索
     * @param tripSearchReq
     * @return
     */
    TripSearchResDTO getTripsByParams(TripSearchReq tripSearchReq);

    /**
     * PC 当季热卖
     * @return
     */
    List<TripGroup> getHotGroupInfo(LocalHotSearchReq req);

    /**
     * APP&H5 旅行团首页 搜索栏菜单分类
     * @return
     */
    Result<List<TripHomeCatalogDTO>> getTripHomeH5CatalogDTO();

    /**
     * APP&H5 旅行团 检索
     * @param tripSearchReq
     * @return
     */
    TripH5SearchResDTO getTripsByParamsFromH5(TripSearchReq tripSearchReq);

    /**
     * APP&H5 当季热卖分类与通告
     * @return
     */
    TourHomeHotTypeAndMsgDTO tripHotTypeAndMsgInfo();

    /**
     * APP&H5 旅行团 详情
     * @param req
     * @return
     */
    Result getH5TripDetails(TripDetailsReq req);

    /**
     * APP&H5 旅行团详情 费用说明
     * @param req
     * @return
     */
    Result<TripExpenseDescriptionDTO> expenseDescription(TripDetailsReq req);

    /**
     * APP&H5 旅行团详情 报名须知
     * @param req
     * @return
     */
    Result signNotice(TripDetailsReq req);

    /**
     * APP&H5 旅行团详情 备注
     * @param req
     * @return
     */
    Result remark(TripDetailsReq req);

    /**
     * APP&H5 旅行团详情 日期&价格
     * @param req
     * @return
     */
    Result<List<ScheduleInfoCacheDTO>> dateAndPrice(TripDetailsDateReq req);

    /**
     * 行程详情 - 相关推荐
     * @param req
     * @return
     */
    List<TripsRecommendDTO> recommends(TripRecommendReq req);

    /**
     * 查询分社列表
     * @param req
     * @return
     */
    List<BranchOfficeListDTO> queryBranchList(BranchQueryReq req);

    /**
     * 查询分社详情
     * @param branchId
     * @return
     */
    BranchOfficeDetailsDTO queryBranchDetails(String branchId);

    /**
     * 查询行程标题与副标题
     * @param tripNumber
     * @return
     */
    TripTitleDTO queryTripTitle(String tripNumber);

    /**
     * 旅行团-详情页-收藏
     * @param req
     * @return
     */
    Result favorites(FavoritesReq req, TokenUser user);

    /**
     * 旅行团首页目录缓存
     * @return
     */
    Boolean tripHomeCatalogDTO();

    /**
     * 删除行程缓存
     * @param id
     */
    void deleteTripCache(Long id);

    /**
     * H5首页热门推荐分组信息
     * @param req
     * @return
     */
    List<H5TripGroupDTO> getH5HotGroupInfo(LocalHotSearchReq req);

    /**
     * 缓存淘汰
     */
    Result cacheWeedOut();
}
